package newcodercyclecontrol;

import java.util.Scanner;

public class Exercise66 {

    //    描述
//    小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵，他希望你帮他生成一个扫雷矩阵。
//    扫雷矩阵的每一行每一列都是一个数字，每个数字的含义是与当前位置相邻的8个方向中，有多少个雷（在下图中，雷用*表示）；如果当前位置就是雷的话，仍输出一个*。
//    比如初始的雷矩阵如下：
//            ....
//            ..**
//            *.*.
//            .*.*
//    对应的数字矩阵为：
//            0122
//
//            13**
//
//            *4*4
//
//            2*3*
//    输入描述：
//    第一行两个整数n,m，代表矩阵有n行m列
//    接下来共n行，每行m个字符
//    输出描述：
//    输出共n行m列，为扫雷矩阵。
//    示例1
//    输入：
//            4 4
//            ....
//            ..**
//            *.*.
//            .*.*
//    输出：
//            0122
//            13**
//            *4*4
//            2*3*
//            示例2
//    输入：
//            3 4
//            ....
//            *..*
//            .*.*
//    输出：
//            1111
//            *23*
//            2*3*
//    备注：
//    数据范围：
//            1≤n,m≤1000
    public static void main(String[] args) {

/**
 * int output(int x, int y, int z, int k, char ch[][k]) {
 *     int count = 0;
 *     //在当前值周围进行循环判断
 *     for (int i = x - 1; i <= x + 1; i++) {
 *         for (int j = y - 1; j <= y + 1; j++) {
 *             //若有*且不超出矩阵范围，地雷加1
 *             if (ch[i][j] == '*' && i >= 0 && i < z && j >= 0 && j < k)
 *                 count++;
 *         }
 *     }
 *     return count;  //返回地雷数
 * }
 * int main() {
 *     int n, m, count = 0;
 *     scanf("%d %d\n", &n, &m);
 *     char ch[n][m];
 *     //依次输入字符
 *     for (int i = 0; i < n; i++) {
 *         for (int j = 0; j < m; j++) {
 *             scanf("%c ", &ch[i][j]);
 *         }
 *     }
 *     //依次判断并输出字符
 *     for (int i = 0; i < n; i++) {
 *         for (int j = 0; j < m; j++) {
 *             if (ch[i][j] != '*') {  //字符不为*时，计算当前值应为多少
 *                 ch[i][j] = output(i, j, n, m, ch);  //字符替换地雷数值
 *                 printf("%d", ch[i][j]);  //输出当前值
 *             } else printf("%c", ch[i][j]);  //字符为*时，直接输出
 *         }
 *         printf("\n");
 *     }
 *     return 0;
 * }
 */

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        char[][] a = new char[n][m];
        for (int i = 0; i < a.length; i++) {
            String s = sc.next();
            a[i] = s.toCharArray();
        }
        // 打印出数组
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] == '*') {
                    System.out.print('*');
                    continue;
                }
                // 查看周围
                int count = 0; // 周围是否有雷
                // 本来是分别写的后来为了方便就写成了循环
                // 查看上面和左上/右上
//                if (i - 1 >= 0 ) {
//                    if (a[i - 1][j] == '*') {
//                        count ++;
//                    }
//                    // 左上
//                    if (j - 1 >= 0) {
//                        if (a[i - 1][j - 1] == '*') {
//                            count ++;
//                        }
//                    }
//                    // 右上
//                    if (j + 1 < a[i].length) {
//                        if (a[i - 1][j + 1] == '*') {
//                            count ++;
//                        }
//                    }
//                }
//                // 查看下面,左下，右下
//                if (i + 1 < a.length) {
//                    if (a[i + 1][j] == '*') {
//                        count++;
//                    }
//                    // 左下
//                    if (j - 1 >= 0) {
//                        if (a[i + 1][j - 1] == '*') {
//                            count++;
//                        }
//                    }
//                    // 右下
//                    if (j + 1 < a[i].length) {
//                        if (a[i + 1][j + 1] == '*') {
//                            count++;
//                        }
//                    }
//                }
//                // 查看左面
//                if (j - 1 >= 0) {
//                    if (a[i][j - 1] == '*') {
//                        count++;
//                    }
//                }
//                // 查看右面
//                if (j + 1 < a[i].length) {
//                    if (a[i][j + 1] == '*') {
//                        count++;
//                    }
//                }
                // 循环写法，但是后来是遇到超时问题(后来找了现有的题解，发现了一个c写法的，和我这个是一样的，可以运行)
                // 在本地ide中运行结果是没有问题的
                for (int x = i - 1; x <= i + 1; x++) {
                    if (x < 0 || x >= n) {
                        continue;
                    }
                    for (int y = j - 1; y <= j + 1; y++) {
                        if (y < 0 || y >= m) {
                            continue;
                        } else if (a[x][y] == '*') {
                            count++;
                        }
                    }
                }
                System.out.print(count);
            }
            System.out.println();
        }
    }

}
